TwoX-Hash
A Rust implementation of the XXHash algorithm.
Documentation
Examples
With a fixed seed
use std::hash::BuildHasherDefault;
use std::collections::HashMap;
use twox_hash::XxHash64;
let mut hash: HashMap<_, _, BuildHasherDefault<XxHash64>> = Default::default();
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));
With a random seed
use std::collections::HashMap;
use twox_hash::RandomXxHashBuilder64;
let mut hash: HashMap<_, _, RandomXxHashBuilder64> = Default::default();
hash.insert(42, "the answer");
assert_eq!(hash.get(&42), Some(&"the answer"));
Benchmarks
64-bit
Bytes |
SipHasher (MB/s) |
XXHash (MB/s) |
Ratio |
1 |
52 |
38 |
73% |
4 |
210 |
148 |
70% |
16 |
615 |
615 |
100% |
32 |
914 |
1391 |
152% |
128 |
1347 |
3657 |
271% |
256 |
1414 |
5019 |
355% |
512 |
1546 |
6168 |
399% |
1024 |
1565 |
6206 |
397% |
1048576 |
1592 |
7564 |
475% |
Bytes |
FnvHasher (MB/s) |
XXHash (MB/s) |
Ratio |
1 |
1000 |
38 |
4% |
4 |
800 |
148 |
19% |
16 |
761 |
615 |
81% |
32 |
761 |
1391 |
183% |
128 |
727 |
3657 |
503% |
256 |
759 |
5019 |
661% |
512 |
745 |
6168 |
828% |
1024 |
741 |
6206 |
838% |
1048576 |
745 |
7564 |
1015% |
32-bit
Bytes |
SipHasher (MB/s) |
XXHash32 (MB/s) |
Ratio |
1 |
52 |
55 |
106% |
4 |
210 |
210 |
100% |
16 |
615 |
1230 |
200% |
32 |
914 |
1882 |
206% |
128 |
1347 |
3282 |
244% |
256 |
1414 |
3459 |
245% |
512 |
1546 |
3792 |
245% |
1024 |
1565 |
3938 |
252% |
1048576 |
1592 |
4127 |
259% |
Bytes |
FnvHasher (MB/s) |
XXHash32 (MB/s) |
Ratio |
1 |
1000 |
55 |
6% |
4 |
800 |
210 |
26% |
16 |
761 |
1230 |
162% |
32 |
761 |
1882 |
247% |
128 |
727 |
3282 |
451% |
256 |
759 |
3459 |
456% |
512 |
745 |
3792 |
509% |
1024 |
741 |
3938 |
531% |
1048576 |
745 |
4127 |
554% |
Contributing
- Fork it ( https://github.com/shepmaster/twox-hash/fork )
- Create your feature branch (
git checkout -b my-new-feature
)
- Add a failing test.
- Add code to pass the test.
- Commit your changes (
git commit -am 'Add some feature'
)
- Ensure tests pass.
- Push to the branch (
git push origin my-new-feature
)
- Create a new Pull Request